/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Data;

import java.util.ArrayList;
import java.util.HashMap;

/**
 *
 * @author REI
 */
public class Nivel {
    
    private String nombre;
    private int ancho;
    private int alto;
    private boolean especial;
    private HashMap<String, NodoEspacio> espacios;
    private ArrayList<NodoCasilla> casillas;
    private NodoCasilla matriz[][];

    public Nivel() {
        
        espacios = new HashMap<String, NodoEspacio>();
        casillas = new ArrayList<NodoCasilla>();
    }
    
    
    public boolean insertarEspacio(String id, NodoEspacio espacio)
    {
        if(espacios.containsKey(id))
        {
            return true;
            
        }
        else 
        {
            espacios.put(id, espacio);
            return false;
        }
    }
    
    public NodoEspacio buscarEspacio(String nombre)
    {
                
        if(espacios.containsKey(nombre))
        {
            return espacios.get(nombre);
        }
        else
        {
            return null;
        }
               
        
    }
    
    public NodoEspacio heredarAtributos(NodoEspacio hijo, NodoEspacio padre)
    {
         NodoEspacio heredado;
         heredado = padre;
         heredado.setExtiende(padre.getNombre());
         heredado.setNombre(hijo.getNombre());
         return heredado;
    }
    
    public boolean verificarPosicion(int x, int y)
    {
        if(x*y >ancho*alto )
        {
            return true;
        }
        else
            return false;
                
    }
    
    public void agregarCasilla(Object cas)
    {
        NodoCasilla casilla  = (NodoCasilla)cas;
        
        if(casilla!=null)
        {
            casillas.add(casilla);
        }
    }
    
    public int verificarCantCasillas()
    {
        if(casillas.size()>ancho * alto)
        {
            return 1;
        }
        else if(casillas.size()>ancho * alto)
        {
            return -1;
        }
        else
            return 0;
                
    }
    
    public int ordenarCasillas()
    {
        matriz = new NodoCasilla[ancho][alto];
        int incorrecta=0;
        int correcta;
        
        for(int x=0; x < ancho; x++)
        {
            correcta = 0;
            for(int y=0; y < alto; y++)
            {
                for (NodoCasilla nodoCasilla : casillas) {
                    
                    if(x == nodoCasilla.getPosx() && y == nodoCasilla.getPosy())
                    {
                        correcta = 1;
                        matriz[x][y] = nodoCasilla;
                    }
                    
                }
                
                if(correcta!=1)
                {
                    incorrecta++;
                }
            }
        }
        
        return incorrecta;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getAncho() {
        return ancho;
    }

    public void setAncho(int ancho) {
        this.ancho = ancho;
    }

    public int getAlto() {
        return alto;
    }

    public void setAlto(int alto) {
        this.alto = alto;
    }

    public boolean isEspecial() {
        return especial;
    }

    public void setEspecial(boolean especial) {
        this.especial = especial;
    }

    public HashMap<String, NodoEspacio> getEspacios() {
        return espacios;
    }

    public void setEspacios(HashMap<String, NodoEspacio> espacios) {
        this.espacios = espacios;
    }

    public ArrayList<NodoCasilla> getCasillas() {
        return casillas;
    }

    public void setCasillas(ArrayList<NodoCasilla> casillas) {
        this.casillas = casillas;
    }

    public NodoCasilla[][] getMatriz() {
        return matriz;
    }
    
    public NodoCasilla obtenerCasilla(int f, int c)
    {
        return matriz[f][c];
    }
    
    
    

    
    
    
}
